| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- from abc import ABC
- from openai import OpenAI
- import os
- import base64
- from io import BytesIO
-
- class Base(ABC):
- def describe(self, image, max_tokens=300):
- raise NotImplementedError("Please implement encode method!")
-
-
- class GptV4(Base):
- def __init__(self):
- import openapi
- openapi.api_key = os.environ["OPENAPI_KEY"]
- self.client = OpenAI()
-
- def describe(self, image, max_tokens=300):
- buffered = BytesIO()
- try:
- image.save(buffered, format="JPEG")
- except Exception as e:
- image.save(buffered, format="PNG")
- b64 = base64.b64encode(buffered.getvalue()).decode("utf-8")
-
- res = self.client.chat.completions.create(
- model="gpt-4-vision-preview",
- messages=[
- {
- "role": "user",
- "content": [
- {
- "type": "text",
- "text": "请用中文详细描述一下图中的内容,比如时间,地点,人物,事情,人物心情等。",
- },
- {
- "type": "image_url",
- "image_url": {
- "url": f"data:image/jpeg;base64,{b64}"
- },
- },
- ],
- }
- ],
- max_tokens=max_tokens,
- )
- return res.choices[0].message.content.strip()
-
-
- class QWen(Base):
- def chat(self, system, history, gen_conf):
- from http import HTTPStatus
- from dashscope import Generation
- from dashscope.api_entities.dashscope_response import Role
- # export DASHSCOPE_API_KEY=YOUR_DASHSCOPE_API_KEY
- response = Generation.call(
- Generation.Models.qwen_turbo,
- messages=messages,
- result_format='message'
- )
- if response.status_code == HTTPStatus.OK:
- return response.output.choices[0]['message']['content']
- return response.message
|